﻿#pragma warning disable IDE1006
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WUDI.ECharts
{
	/// <summary>
	/// brush 是区域选择组件，用户可以选择图中一部分数据，从而便于向用户展示被选中数据，或者他们的一些统计计算结果
	/// <para>
	/// 刷子的类型和启动按钮
	/// </para>
	/// <para>
	/// 目前 brush 组件支持的图表类型
	/// </para>
	/// <para>
	/// scatter、bar、candlestick（parallel 本身自带刷选功能，但并非由 brush 组件来提供）
	/// </para>
	/// <para>
	/// 点击 toolbox 中的按钮，能够进行『区域选择』、『清除选择』等操作
	/// </para>
	/// <para>
	/// 启动 brush 的按钮既可以在 toolbox 中指定（参见 brush.toolbox
	/// </para>
	/// <para>
	/// #brush.toolbox）
	/// </para>
	/// <para>
	/// 支持这几种选框
	/// </para>
	/// <para>
	/// 矩形刷子，任意形状刷子，横向刷子，纵向刷子
	/// </para>
	/// <para>
	/// 参见 brush.toolbox
	/// </para>
	/// <para>
	/// #brush.toolbox
	/// </para>
	/// <para>
	/// 可以使用 保持选择 按钮，切换单选和多选模式
	/// </para>
	/// <para>
	/// 单选即同时只能存在一个选框，可单击空白区域消除选框
	/// </para>
	/// <para>
	/// 多选即同时可存在多个选框，单击空白区域不能消除选框，需要点击『清除按钮』消除线框
	/// </para>
	/// <para>
	/// 刷选和坐标系的关系
	/// </para>
	/// <para>
	/// 可以设置 brush 是『全局的』还是『属于坐标系的』
	/// </para>
	/// <para>
	/// 全局 brush
	/// </para>
	/// <para>
	/// 在 echarts 实例中任意地方刷选
	/// </para>
	/// <para>
	/// 这是默认情况
	/// </para>
	/// <para>
	/// 如果没有指定为『坐标系 brush』，就是『全局 brush』
	/// </para>
	/// <para>
	/// 坐标系 brush
	/// </para>
	/// <para>
	/// 在 指定的坐标系中刷选
	/// </para>
	/// <para>
	/// 选框可以跟随坐标系的缩放和平移（roam 和 dataZoom）而移动
	/// </para>
	/// <para>
	/// 坐标系 brush 实际更为常用，尤其是在 geo 中
	/// </para>
	/// <para>
	/// 通过指定 brush.yAxisIndex
	/// </para>
	/// <para>
	/// #brush.yAxisIndex 来规定可以在哪些坐标系中进行刷选
	/// </para>
	/// <para>
	/// &amp;#39;all，表示所有
	/// </para>
	/// <para>
	/// number，如 0，表示这个 index 所对应的坐标系
	/// </para>
	/// <para>
	/// Array，如 [0, 4, 2]，表示指定这些 index 所对应的坐标系
	/// </para>
	/// <para>
	/// none 或 null 或 undefined，表示不指定
	/// </para>
	/// <para>
	/// 使用 API 控制选框
	/// </para>
	/// <para>
	/// 详情参见 action.brush
	/// </para>
	/// <para>
	/// api.html#action.brush
	/// </para>
	/// <para>
	/// brushLink
	/// </para>
	/// <para>
	/// 不同系列间，选中的项可以联动
	/// </para>
	/// <para>
	/// brush.outOfBrush
	/// </para>
	/// <para>
	/// 下面是详细配置
	/// </para>
	/// </summary>
	public class Brush
	{

		/// <summary>
		/// 组件 ID。默认不指定。指定则可用于在 option 或者 API 中引用组件。
		/// </summary>
		public dynamic id { get; set; } 

		/// <summary>
		/// 使用在 toolbox 中的按钮
		/// <para>
		/// rect
		/// </para>
		/// <para>
		/// 开启矩形选框选择功能
		/// </para>
		/// <para>
		/// polygon
		/// </para>
		/// <para>
		/// 开启任意形状选框选择功能
		/// </para>
		/// <para>
		/// lineX
		/// </para>
		/// <para>
		/// 开启横向选择功能
		/// </para>
		/// <para>
		/// lineY
		/// </para>
		/// <para>
		/// 开启纵向选择功能
		/// </para>
		/// <para>
		/// keep
		/// </para>
		/// <para>
		/// 切换『单选』和『多选』模式
		/// </para>
		/// <para>
		/// 后者可支持同时画多个选框
		/// </para>
		/// <para>
		/// 前者支持单击清除所有选框
		/// </para>
		/// <para>
		/// clear
		/// </para>
		/// <para>
		/// 清空所有选框
		/// </para>
		/// </summary>
		public dynamic toolbox { get; set; }  = "['rect', 'polygon', 'keep', 'clear']";

		/// <summary>
		/// 不同系列间，选中的项可以联动。
		/// index 对应的。*
		/// <para>Array/string</para>
		/// </summary>
		public dynamic brushLink { get; set; } 

		/// <summary>
		/// all: 所有 series
		/// <para>
		/// Array: series index 列表
		/// </para>
		/// <para>
		/// number: 某个 series index
		/// </para>
		/// </summary>
		public WUDI.ECharts.SeriesIndex seriesIndex { get; set; }  = WUDI.ECharts.SeriesIndex.all;

		/// <summary>
		/// 指定哪些 geo 可以被刷选
		/// <para>
		/// 可以设置 brush 是『全局的』还是『属于坐标系的』
		/// </para>
		/// <para>
		/// 全局 brush
		/// </para>
		/// <para>
		/// 在 echarts 实例中任意地方刷选
		/// </para>
		/// <para>
		/// 这是默认情况
		/// </para>
		/// <para>
		/// 如果没有指定为『坐标系 brush』，就是『全局 brush』
		/// </para>
		/// <para>
		/// 坐标系 brush
		/// </para>
		/// <para>
		/// 在 指定的坐标系中刷选
		/// </para>
		/// <para>
		/// 选框可以跟随坐标系的缩放和平移（roam 和 dataZoom）而移动
		/// </para>
		/// <para>
		/// 坐标系 brush 实际更为常用，尤其是在 geo 中
		/// </para>
		/// <para>
		/// 通过指定 brush.yAxisIndex
		/// </para>
		/// <para>
		/// #brush.yAxisIndex 来规定可以在哪些坐标系中进行刷选
		/// </para>
		/// <para>
		/// all，表示所有
		/// </para>
		/// <para>
		/// number，如 0，表示这个 index 所对应的坐标系
		/// </para>
		/// <para>
		/// Array，如 [0, 4, 2]，表示指定这些 index 所对应的坐标系
		/// </para>
		/// <para>
		/// none 或 null 或 undefined，表示不指定
		/// </para>
		/// <para>Array/number/string</para>
		/// </summary>
		public dynamic geoIndex { get; set; } 

		/// <summary>
		/// 指定哪些 xAxisIndex 可以被刷选
		/// <para>
		/// 可以设置 brush 是『全局的』还是『属于坐标系的』
		/// </para>
		/// <para>
		/// 全局 brush
		/// </para>
		/// <para>
		/// 在 echarts 实例中任意地方刷选
		/// </para>
		/// <para>
		/// 这是默认情况
		/// </para>
		/// <para>
		/// 如果没有指定为『坐标系 brush』，就是『全局 brush』
		/// </para>
		/// <para>
		/// 坐标系 brush
		/// </para>
		/// <para>
		/// 在 指定的坐标系中刷选
		/// </para>
		/// <para>
		/// 选框可以跟随坐标系的缩放和平移（roam 和 dataZoom）而移动
		/// </para>
		/// <para>
		/// 坐标系 brush 实际更为常用，尤其是在 geo 中
		/// </para>
		/// <para>
		/// 通过指定 brush.yAxisIndex
		/// </para>
		/// <para>
		/// #brush.yAxisIndex 来规定可以在哪些坐标系中进行刷选
		/// </para>
		/// <para>
		/// all，表示所有
		/// </para>
		/// <para>
		/// number，如 0，表示这个 index 所对应的坐标系
		/// </para>
		/// <para>
		/// Array，如 [0, 4, 2]，表示指定这些 index 所对应的坐标系
		/// </para>
		/// <para>
		/// none 或 null 或 undefined，表示不指定
		/// </para>
		/// <para>Array/number/string</para>
		/// </summary>
		public dynamic xAxisIndex { get; set; } 

		/// <summary>
		/// 指定哪些 yAxisIndex 可以被刷选
		/// <para>
		/// 可以设置 brush 是『全局的』还是『属于坐标系的』
		/// </para>
		/// <para>
		/// 全局 brush
		/// </para>
		/// <para>
		/// 在 echarts 实例中任意地方刷选
		/// </para>
		/// <para>
		/// 这是默认情况
		/// </para>
		/// <para>
		/// 如果没有指定为『坐标系 brush』，就是『全局 brush』
		/// </para>
		/// <para>
		/// 坐标系 brush
		/// </para>
		/// <para>
		/// 在 指定的坐标系中刷选
		/// </para>
		/// <para>
		/// 选框可以跟随坐标系的缩放和平移（roam 和 dataZoom）而移动
		/// </para>
		/// <para>
		/// 坐标系 brush 实际更为常用，尤其是在 geo 中
		/// </para>
		/// <para>
		/// 通过指定 brush.yAxisIndex
		/// </para>
		/// <para>
		/// #brush.yAxisIndex 来规定可以在哪些坐标系中进行刷选
		/// </para>
		/// <para>
		/// all，表示所有
		/// </para>
		/// <para>
		/// number，如 0，表示这个 index 所对应的坐标系
		/// </para>
		/// <para>
		/// Array，如 [0, 4, 2]，表示指定这些 index 所对应的坐标系
		/// </para>
		/// <para>
		/// none 或 null 或 undefined，表示不指定
		/// </para>
		/// <para>Array/number/string</para>
		/// </summary>
		public dynamic yAxisIndex { get; set; } 

		/// <summary>
		/// 默认的刷子类型
		/// <para>
		/// rect
		/// </para>
		/// <para>
		/// 矩形选框
		/// </para>
		/// <para>
		/// polygon
		/// </para>
		/// <para>
		/// 任意形状选框
		/// </para>
		/// <para>
		/// lineX
		/// </para>
		/// <para>
		/// 横向选择
		/// </para>
		/// <para>
		/// lineY
		/// </para>
		/// <para>
		/// 纵向选择
		/// </para>
		/// </summary>
		public dynamic brushType { get; set; }  = "rect";

		/// <summary>
		/// single。单选。
		/// multiple。多选。
		/// </summary>
		public WUDI.ECharts.BrushMode brushMode { get; set; }  = WUDI.ECharts.BrushMode.single;

		/// <summary>
		/// 已经选好的选框是否可以被调整形状或平移。
		/// </summary>
		public dynamic transformable { get; set; }  = true;

		public dynamic brushStyle { get; set; } 

		/// <summary>
		/// 默认情况，刷选或者移动选区的时候，会不断得发 brushSelected 事件，从而告诉外界选中的内容
		/// <para>
		/// 但是频繁的事件可能导致性能问题，或者动画效果很差
		/// </para>
		/// <para>
		/// 所以 brush 组件提供了 brush.throttleDelay
		/// </para>
		/// <para>
		/// #brush.throttleDelay 来解决这个问题
		/// </para>
		/// <para>
		/// debounce
		/// </para>
		/// <para>
		/// 表示只有停止动作了（即一段时间没有操作了），才会触发事件
		/// </para>
		/// <para>
		/// 时间阈值由 brush.throttleDelay
		/// </para>
		/// <para>
		/// #brush.throttleDelay 指定
		/// </para>
		/// <para>
		/// fixRate
		/// </para>
		/// <para>
		/// 表示按照一定的频率触发事件，时间间隔由 brush.throttleDelay
		/// </para>
		/// <para>
		/// #brush.throttleDelay 指定
		/// </para>
		/// </summary>
		public dynamic throttleType { get; set; }  = "fixRate";

		/// <summary>
		/// 默认为 0 表示不开启 throttle
		/// <para>
		/// 默认情况，刷选或者移动选区的时候，会不断得发 brushSelected 事件，从而告诉外界选中的内容
		/// </para>
		/// <para>
		/// 但是频繁的事件可能导致性能问题，或者动画效果很差
		/// </para>
		/// <para>
		/// 所以 brush 组件提供了 brush.throttleDelay
		/// </para>
		/// <para>
		/// #brush.throttleDelay 来解决这个问题
		/// </para>
		/// <para>
		/// debounce
		/// </para>
		/// <para>
		/// 表示只有停止动作了（即一段时间没有操作了），才会触发事件
		/// </para>
		/// <para>
		/// 时间阈值由 brush.throttleDelay
		/// </para>
		/// <para>
		/// #brush.throttleDelay 指定
		/// </para>
		/// <para>
		/// fixRate
		/// </para>
		/// <para>
		/// 表示按照一定的频率触发事件，时间间隔由 brush.throttleDelay
		/// </para>
		/// <para>
		/// #brush.throttleDelay 指定
		/// </para>
		/// </summary>
		public dynamic throttleDelay { get; set; }  = 0;

		/// <summary>
		/// 在 brush.brushMode
		/// <para>
		/// #brush.brushMode 为 single 的情况下，是否支持『单击清除所有选框』
		/// </para>
		/// </summary>
		public dynamic removeOnClick { get; set; }  = true;

		/// <summary>
		/// 定义 在选中范围中 的视觉元素
		/// <para>
		/// symbol: 图元的图形类别
		/// </para>
		/// <para>
		/// symbolSize: 图元的大小
		/// </para>
		/// <para>
		/// color: 图元的颜色
		/// </para>
		/// <para>
		/// colorAlpha: 图元的颜色的透明度
		/// </para>
		/// <para>
		/// opacity: 图元以及其附属物（如文字标签）的透明度
		/// </para>
		/// <para>
		/// colorLightness: 颜色的明暗度，参见 HSL
		/// </para>
		/// <para>
		/// <see href="https://en.wikipedia.org/wiki/HSL_and_HSV"/>
		/// </para>
		/// <para>
		/// colorSaturation: 颜色的饱和度，参见 HSL
		/// </para>
		/// <para>
		/// target=
		/// </para>
		/// <para>
		/// colorHue: 颜色的色调，参见 HSL
		/// </para>
		/// <para>
		/// 大多数情况下，inBrush 可以不指定，维持本来的视觉配置
		/// </para>
		/// </summary>
		public WUDI.ECharts.InBrush inBrush { get; set; } 

		/// <summary>
		/// 定义 在选中范围外 的视觉元素
		/// <para>
		/// symbol: 图元的图形类别
		/// </para>
		/// <para>
		/// symbolSize: 图元的大小
		/// </para>
		/// <para>
		/// color: 图元的颜色
		/// </para>
		/// <para>
		/// colorAlpha: 图元的颜色的透明度
		/// </para>
		/// <para>
		/// opacity: 图元以及其附属物（如文字标签）的透明度
		/// </para>
		/// <para>
		/// colorLightness: 颜色的明暗度，参见 HSL
		/// </para>
		/// <para>
		/// <see href="https://en.wikipedia.org/wiki/HSL_and_HSV"/>
		/// </para>
		/// <para>
		/// colorSaturation: 颜色的饱和度，参见 HSL
		/// </para>
		/// <para>
		/// target=
		/// </para>
		/// <para>
		/// colorHue: 颜色的色调，参见 #ddd，如果你不想要这个color，比如可以
		/// </para>
		/// </summary>
		public WUDI.ECharts.OutOfBrush outOfBrush { get; set; } 

		/// <summary>
		/// brush 选框的 z-index。当有和不想管组件有不正确的重叠时，可以进行调整。
		/// </summary>
		public dynamic z { get; set; }  = 10000;

	}
}